#include <bits/stdc++.h>
//#define int long long
#define ll long long
using namespace std;
const int N=2e5+5;
int a[N],n,m,K;
bool g[N<<1];
int l[N],r[N],xx[N],tot,len[N<<1],lc[N<<1],rc[N<<1],dep[N<<1],hsh[4];
int id[20][N<<1],qid[N],fa[N<<1];
ll Ans[N<<1];
int tg[N<<1],mii[N<<1];
ll sm[N<<1][20];
void upd(int x){
    sm[x][r[x]]=0;
    Ans[x]=sm[x][K+1]=x;
    mii[x]=0;
    int fx;
    for(int Mi,i=1;i<=K;i++){
        fx=fa[x];
        if(!g[fx]){
            Mi=mii[lc[fx]];
            mii[fx]=K+1;
            Ans[fx]=0;
            for(int j=0;j<dep[fx];j++)sm[fx][j]=0;
            if(sm[lc[fx]][K+1])mii[fx]=0;
            for(int j=dep[fx];j<=K+1;j++){
                sm[fx][j]=sm[lc[fx]][j],Ans[fx]+=sm[fx][j];
                if(sm[fx][j])mii[fx]=min(mii[fx],j);
            }
            if(Mi<dep[fx]){
                mii[fx]=min(mii[fx],mii[rc[fx]]);
                for(int j=0;j<=K+1;j++)sm[fx][j]+=sm[rc[fx]][j],Ans[fx]+=sm[rc[fx]][j];
            }
            else{
                //mii[fx]=max(mii[fx],dep[fx]);
            }
        }
        else{
            Mi=mii[rc[fx]];
            mii[fx]=K+1;
            Ans[fx]=0;
            for(int j=0;j<dep[fx];j++)sm[fx][j]=0;
            if(sm[rc[fx]][K+1])mii[fx]=0;
            for(int j=dep[fx];j<=K+1;j++){
                sm[fx][j]=sm[rc[fx]][j],Ans[fx]+=sm[fx][j];
                if(sm[fx][j])mii[fx]=min(mii[fx],j);
            }
            if(Mi<dep[fx]){
                mii[fx]=min(mii[fx],mii[lc[fx]]);
                for(int j=0;j<=K+1;j++)sm[fx][j]+=sm[lc[fx]][j],Ans[fx]+=sm[lc[fx]][j];
            }
            else{
                //mii[fx]=max(mii[fx],dep[fx]);
            }
        }
        x=fx;
        //cout<<x<<' '<<mii[x]<<' '<<dep[x]<<' '<<Ans[x]<<' '<<sm[x][0]<<' '<<sm[x][1]<<' '<<sm[x][2]<<' '<<sm[x][3]<<'\n';
    }
}
struct node{
    int qry,id;
}Qr[N];
bool cmp(node x,node y){
    return x.qry>y.qry;
}
signed main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin>>n>>m;
    int nn=n;
    for(int i=1;i<=20;i++)if((1<<i)>=n){
        K=i;
        break;
    }
    for(int i=1;i<=n;i++)cin>>xx[i];
    for(int i=1;i<=m;i++)cin>>Qr[i].qry,Qr[i].id=i;
    sort(Qr+1,Qr+m+1,cmp);
    n=(1<<K);tot=n;
    char chr;
    for(int i=1;i<=n;i++)id[0][i]=i;
    for(int i=1;i<=K;i++){
        for(int j=1;j<=(n>>i);j++){
            cin>>chr;
            ++tot;
            if(chr=='0')g[tot]=0;
            else g[tot]=1;
            len[tot]=(1<<i);
            id[i][j]=tot;
            lc[tot]=id[i-1][(j-1)*2+1];
            rc[tot]=id[i-1][j*2];
            fa[lc[tot]]=fa[rc[tot]]=tot;
            dep[tot]=i;
        }
    }
    //for(int i=n+1;i<=tot;i++)cout<<L[i]<<' '<<R[i]<<' '<<lc[i]<<' '<<rc[i]<<' '<<dep[i]<<' '<<len[i]<<'\n';
    for(int i=1;i<=m;i++){
        for(int j=0;j<=K;j++){
            if((1<<j)>=Qr[i].qry){
                qid[i]=id[j][1];
                break;
            }
        }
    }
    for(int i=nn+1;i<=n;i++)sm[i][K+1]=i,Ans[i]=i,mii[i]=0,r[i]=K+1;
    int tc;
    cin>>tc;
    for(int _=1;_<=tc;_++){
        for(int i=0;i<4;i++)cin>>hsh[i];
        for(int i=1;i<=nn;i++)l[i]=r[i]=min(K,xx[i]^hsh[i%4]);//,cout<<"#"<<_<<" "<<l[i]<<' '<<i<<'\n';
        for(int i=1;i<=n;i++){
            for(int j=0;j<=K+1;j++)sm[i][j]=0;
            Ans[i]=i;
            mii[i]=l[i];
            sm[i][r[i]]=i;
        }
        for(int Mi,i=n+1;i<=tot;i++){
            for(int j=0;j<=K+1;j++)sm[i][j]=0;
            if(g[i]){
                Mi=mii[rc[i]];
                mii[i]=K+1;
                Ans[i]=0;
                if(sm[rc[i]][K+1])mii[i]=0;
                for(int j=dep[i];j<=K+1;j++){
                    sm[i][j]=sm[rc[i]][j],Ans[i]+=sm[i][j];
                    if(sm[i][j])mii[i]=min(mii[i],j);
                }
                if(Mi<dep[i]){
                    mii[i]=min(mii[i],mii[lc[i]]);
                    for(int j=0;j<=K+1;j++)sm[i][j]+=sm[lc[i]][j],Ans[i]+=sm[lc[i]][j];
                }
                else{
                    //mii[i]=max(mii[i],dep[i]);
                }
            }
            else{
                Mi=mii[lc[i]];
                mii[i]=K+1;
                Ans[i]=0;
                if(sm[lc[i]][K+1])mii[i]=0;
                for(int j=dep[i];j<=K+1;j++){
                    sm[i][j]=sm[lc[i]][j],Ans[i]+=sm[i][j];
                    if(sm[i][j])mii[i]=min(mii[i],j);
                }
                if(Mi<dep[i]){
                    mii[i]=min(mii[i],mii[rc[i]]);
                    for(int j=0;j<=K+1;j++)sm[i][j]+=sm[rc[i]][j],Ans[i]+=sm[rc[i]][j];
                }
                else{
                    //mii[i]=max(mii[i],dep[i]);
                }
            }
            //cout<<i<<' '<<mii[i]<<' '<<dep[i]<<' '<<Ans[i]<<' '<<sm[i][0]<<' '<<sm[i][1]<<' '<<sm[i][2]<<' '<<sm[i][3]<<'\n';
        }
        int j=nn;
        ll anss=0;
        for(int q=1;q<=m;q++){
            while(j>Qr[q].qry){
                upd(j);
                j--;
            }
            //cout<<q<<' '<<qid[q]<<' '<<Ans[qid[q]]<<'\n';
            anss^=1ll*Qr[q].id*Ans[qid[q]];
        }
        cout<<anss<<'\n';
    }
    return 0;
}
/*
5 5
0 0 0 0 0
5 4 1 2 3
1001
10
1
4
2 1 0 0
1 2 1 0
0 2 3 1
2 2 0 1

5
19
7
1
*/
